home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Gamer (Italian) 30
/
PC Gamer IT CD 30 1-2.iso
/
MOTS
/
GAMEDATA
/
RESOURCE
/
JKMRES.GOO
/
cog_weap_saber_m.cog
< prev
next >
Wrap
Text File
|
1998-02-25
|
19KB
|
643 lines
# Jedi Knight Missions Cog Script
#
# WEAP_SABER_M.COG
#
# WEAPON Script - Lightsaber
#
# [CYW] + [RF] + [YB]
#
# (C) 1997 LucasArts Entertainment Co. All Rights Reserved
# ========================================================================================
symbols
message startup
message activated
message deactivated
message selected
message deselected
message user0
message newplayer
message autoselect
message timer
message fire
message killed
message joined
# ........................................................................................
model povModel=sabv.3do local
model povModel_m=sabv_m.3do local
model saberMesh=sabg.3do local
# ........................................................................................
# POV animations
keyframe mountAnim=SabVmnt.key local
keyframe dismountAnim=SabVdis.key local
keyframe holdAnim=SabVhold.key local
keyframe povSnapAnim1=SabVf1.key local
keyframe povSnapAnim2=SabVf2.key local
keyframe povSnapAnim3=SabVf1.key local
keyframe povPreFireAnim=SabVrdy.key local
keyframe povFireAnimF1=SabVsnp1.key local
keyframe povFireAnimF2=SabVsnp2.key local
keyframe povFireAnimB1=SabVb1.key local
keyframe povFireAnimB2=SabVb2.key local
keyframe povFireAnimL1=SabVl1.key local
keyframe povFireAnimR1=SabVr1.key local
keyframe povChargeAnim=SabVch.key local
keyframe povPreBlockAnim=SabVblk.key local
# ........................................................................................
# External animations
keyframe preFireAnimL=KYreadyl.key local
keyframe preFireAnimR=KYreadyr.key local
keyframe fireAnimF1=KYsnap1.key local
keyframe fireAnimF2=KYsnap2.key local
keyframe fireAnimB1=KYsabrb1.key local
keyframe fireAnimB2=KYsabrb2.key local
keyframe fireAnimL1=KYsabrl1.key local
keyframe fireAnimR1=KYsabrr1.key local
keyframe snapAnim1=KYsabrf1.key local
keyframe snapAnim2=KYsabrf2.key local
keyframe snapAnim3=KYsabrf1.key local
keyframe chargeAnim=KYcharge.key local
keyframe preBlockAnim=KYblock.key local
keyframe holsterAnim=kyhlstr.key local
# ........................................................................................
sound dismountSound=LtSaberOff01.WAV local
sound mountSound=LtSaberOn01.WAV local
sound hitSound01=LtSaberHit01.WAV local
sound hitSound02=LtSaberHit02.WAV local
sound hitSound03=LtSaberHit03.WAV local
sound hitSound12=LtSaberHit12.WAV local
sound hitSound14=LtSaberHit14.WAV local
sound swingSound01=LtSaberSwing01.WAV local
sound swingSound02=LtSaberSwing02.WAV local
sound swingSound03=LtSaberSwing03.WAV local
sound swingSound04=LtSaberSwing04.WAV local
sound swingSound05=LtSaberSwing05.WAV local
sound swingSound06=LtSaberSwing06.WAV local
sound swingSound07=LtSaberSwing07.WAV local
sound swingSound08=LtSaberSwing08.WAV local
sound swingSoundDbl01=LtSaberSwingDbl01.WAV local
sound humSound01=LtSaberLp01.WAV local
flex damage local
flex bladeLen local
flex holsterWait local
thing player local
thing antagonist local
vector ppos local
vector apos local
vector diff local
vector thrust local
flex damage local
flex type local
flex dot local
int iAlignmentPriority=-1 local
# ........................................................................................
# Animation tracks
int mountAnimID=-1 local
int preAnimID=-1 local
int povPreAnimID=-1 local
int slashAnimID=-1 local
int povSlashAnimID=-1 local
# ........................................................................................
int mode local
int slash local
int nextAttack local # 0=right 1=left
int humChannel=-1 local
int holsterTrack=-1 local
int slashSound=-1 local
int assign local
int nosaber=1 local
vector shakePos local
vector shakeAngle local
cog kyleCog local
end
# ========================================================================================
code
startup:
// Set up player with saber.
player = GetLocalPlayerThing();
kyleCog = GetThingClassCog(player);
ClearActorFlags(player, 0x2000);
jkDisableSaber(player);
slash = 0;
nextAttack = 0;
slashAnimID=-1;
povSlashAnimID=-1;
return;
# ........................................................................................
timer:
id = GetSenderId();
if (id == 0)
{
// Only play the hum sound if we still have the saber up.
if ((GetCurWeapon( player ) == 11) && !nosaber)
{
// Play mounting sound.
PlaySoundThing(mountSound, player, 1.0, -1, -1, 0x80);
// Stop humming sound
if(humChannel != -1)
{
StopSound( humChannel, 0.5 );
humChannel = -1;
}
humChannel = PlaySoundThing(humSound01, player, 1.0, -1, -1, 0x81);
jkSetFlags(player, 0x5);
}
}
else
if (id == 1)
{
// Make sure a loose timer doesn't come in and reset the block after we deselect the saber.
if (nosaber == 0)
SetActorFlags(player, 0x2000);
}
else
if (id == 2)
{
StopKey(player, holsterTrack, 0.0);
}
if (id == 3)
{
SetInv(player, 89, 0);
}
if (id == 10)
{
if (GetCurWeapon( player ) == 11)
jkSetFlags(player, 0x81);
}
return;
# ........................................................................................
selected:
// Cannot throw the saber in those 1.25 seconds
SetInv(player, 89, 1);
SetTimerEx(1.25, 3, 0, 0);
assign = GetSenderRef();
// Go to external
if ((jkGetSaberCam() == 1) && (GetCurrentCamera() == 0) && (GetPrimaryFocus(0) == player))
CycleCamera();
// Setup the meshes and models.
if (GetInv(player, 67) == 0.0)
jkSetPOVModel(player, povModel); // Kyle hand
else
jkSetPOVModel(player, povModel_m); // Mara Hand
SetArmedMode( player, 2 );
jkSetWeaponMesh( player, saberMesh );
jkSetWaggle(player, '10.0 7.0 0.0', 350);
if (assign == 0)
{
// Play the animation (NOLOOP + UNIQUE + ENDPAUSE).
// The animation is held at the last frame after it is played.
PlayMode(player, 42);
mountAnimID = jkPlayPOVKey( player, mountAnim, 0, 0x14 );
SetTimerEx(0.7, 0, 0, 0);
}
else
{
mountAnimID = jkPlayPOVKey( player, holdAnim, 0, 0x14 );
// Stop humming sound
if(humChannel != -1)
{
StopSound( humChannel, 0.5 );
humChannel = -1;
}
humChannel = PlaySoundThing(humSound01, player, 1.0, -1, -1, 0x81);
jkSetFlags(player, 0x80);
}
SetMountWait(player, GetKeyLen(mountAnim));
// Set saber flags, and allow activation of the weapon
SetCurWeapon( player, GetWeaponBin(11) );
if (iAlignmentPriority != -1)
{
aiRemoveAlignmentPriority(iAlignmentPriority);
iAlignmentPriority = -1;
}
iAlignmentPriority = aiAddAlignmentPriority(1.0, 2);
// Set autoblock on.
SetActorFlags(player, 0x2000);
jkDisableSaber(player);
nosaber = 0;
return;
# ........................................................................................
deselected:
// Back to POV
if ((jkGetSaberCam() == 1) && (GetCurrentCamera() == 1) && (GetPrimaryFocus(1) == player))
CycleCamera();
// Shrink saber.
jkSetFlags(player, 0x8);
// Dismount the Lightsaber.
PlaySoundThing(dismountSound, player, 1.0, -1, -1, 0x80);
jkPlayPOVKey( player, dismountAnim, 0, 18 );
holsterWait = GetKeyLen(holsterAnim);
SetMountWait(player, holsterWait);
holsterTrack = PlayKey(player, holsterAnim, 1, 0x4);
SetTimerEx(holsterWait, 2, 0.0, 0.0);
call user0;
// DamageThing(player, 200.0, 16, player);
return;
# ........................................................................................
// This part is called directly from Force Saber Throw to get
// a fast dismount but clear all the saber stuff properly...
user0:
// if the mount anim is still playing stop it
if (mountAnimID != -1)
{
jkStopPOVKey( player, mountAnimID, 0 );
mountAnimID = -1;
}
KillTimerEx(0);
jkSetWaggle(player, '0.0 0.0 0.0', 0);
// Clear variables
slash = 0;
nextAttack = 0;
slashAnimID = -1;
povSlashAnimID = -1;
// Stop humming sound
if(humChannel != -1)
{
StopSound( humChannel, 0.5 );
humChannel = -1;
}
if (iAlignmentPriority != -1)
{
aiRemoveAlignmentPriority(iAlignmentPriority);
iAlignmentPriority = -1;
}
// Waylay any hum sound that hasn't started yet.
KillTimerEx(0);
// Disable autoblock
KillTimerEx(1);
ClearActorFlags(player, 0x2000);
jkDisableSaber(player);
nosaber = 1;
Return;
# ........................................................................................
activated:
mode = GetSenderRef();
jkSetWaggle(player, '0.0 0.0 0.0', 0);
if (mode > 1)
return;
povPreAnimID = -1;
preAnimID = -1;
ActivateWeapon( player, 0.5, mode );
// Disable autoblock
ClearActorFlags(player, 0x2000);
return;
# ........................................................................................
deactivated:
mode = GetSenderRef();
jkSetWaggle(player, '10.0 7.0 0.0', 350);
DeactivateWeapon( player, mode );
// Enable autoblock
SetTimerEx(0.5, 1, 0, 0);
return;
# ........................................................................................
fire:
// Stop block animations, by sending a message to kyle.cog.
SendMessage( kyleCog, user0 );
// Tell kyle.cog that the player has done something to attract attention.
SendMessageEx(kyleCog, user1, 3.0, 0, 0, 0);
// Underwater saber attacks.
if (GetMajorMode(player) == 5)
{
jkEnableSaber( player, 50, 0.15, 0.25 );
if (nextAttack == 0)
{
PlayMode( player, 8);
jkPlayPOVKey( player, povFireAnimR1, 2, 0x38 );
nextAttack = 1;
}
else
{
PlayMode( player, 18);
jkPlayPOVKey( player, povFireAnimL1, 2, 0x38 );
nextAttack = 0;
}
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
SetFireWait(player, 1.0);
slashSound = Rand()*7;
PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
}
else
{
mode = GetSenderRef();
if (mode == 0)
{
// If we do another attack, reset the quick slash counter.
thrust = GetThingThrust( player );
// RIGHT Regular Strike
if (VectorX(thrust) > 0)
{
jkEnableSaber( player, 50, 0.15, 0.25 );
jkPlayPOVKey( player, povFireAnimR1, 2, 0x38 );
PlayKey(player, fireAnimR1, 1, 0x38);
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
// PlaySoundThing(swingSound02, player, 1.0, -1, -1, 0x80);
slashSound = Rand()*7;
PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
SetFireWait(player, 0.8);
}
else
// LEFT Regular Strike
if (VectorX(thrust) < 0)
{
jkEnableSaber( player, 50, 0.15, 0.25 );
jkPlayPOVKey( player, povFireAnimL1, 2, 0x38 );
PlayKey(player, fireAnimL1, 1, 0x38);
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
// PlaySoundThing(swingSound02, player, 1.0, -1, -1, 0x80);
slashSound = Rand()*7;
PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
SetFireWait(player, 0.8);
}
else
// BACKWARDS Strike
if (VectorY(thrust) < -0.1)
{
jkEnableSaber( player, 50, 0.15, 0.25 );
if (nextAttack == 0)
{
jkPlayPOVKey( player, povFireAnimB1, 2, 0x38 );
PlayKey(player, fireAnimB1, 2, 0x38);
nextAttack = 1;
}
else
{
jkPlayPOVKey( player, povFireAnimB2, 2, 0x38 );
PlayKey(player, fireAnimB2, 2, 0x38);
nextAttack = 0;
}
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
slashSound = Rand()*7;
PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
SetFireWait(player, 0.8);
}
else
// STANDING Strike
if (VectorY(thrust) < 0.1)
{
jkEnableSaber( player, 50, 0.25, 0.7 );
if (nextAttack == 0)
{
jkPlayPOVKey( player, povFireAnimF1, 2, 0x38 );
PlayKey(player, fireAnimF1, 2, 0x38);
nextAttack = 1;
}
else
{
jkPlayPOVKey( player, povFireAnimF2, 2, 0x38 );
PlayKey(player, fireAnimF2, 2, 0x38);
nextAttack = 0;
}
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
// PlaySoundThing(swingSound02, player, 1.0, -1, -1, 0x80);
slashSound = Rand()*7;
PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
SetFireWait(player, 0.8);
}
else
{
// QUICK slash.
if (slash == 0)
{
// If after a second, we haven't attacked again, reset slash to 0.
jkEnableSaber( player, 40, 0.15, 0.25 );
povSlashAnimID = jkPlayPOVKey( player, povSnapAnim1, 2, 0x38);
slashAnimID = PlayKey(player, snapAnim1, 1, 0x38);
PlaySoundThing(swingSound01, player, 1.0, -1, -1, 0x80);
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
SetFireWait(player, 0.25);
slash = 1;
}
else
if (slash == 1)
{
// Allow another second for the 3rd attack.
jkEnableSaber( player, 40, 0.15, 0.25 );
povSlashAnimID = jkPlayPOVKey( player, povSnapAnim2, 2, 0x38 );
slashAnimID = PlayKey(player, snapAnim2, 1, 0x38);
PlaySoundThing(swingSound03, player, 1.0, -1, -1, 0x80);
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
SetFireWait(player, 0.25);
slash = 2;
}
else
if (slash == 2)
{
jkEnableSaber( player, 60, 0.2, 0.25 );
povSlashAnimID = jkPlayPOVKey( player, povSnapAnim3, 2, 0x38 );
slashAnimID = PlayKey(player, snapAnim3, 1, 0x38);
PlaySoundThing(swingSound02, player, 1.0, -1, -1, 0x80);
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
SetFireWait(player, 1.0);
slash = 0;
}
}
}
// mode == 1
else
{
// HEAVY slash.
{
jkEnableSaber( player, 160, 0.3, 1.2 );
jkPlayPOVKey( player, povChargeAnim, 2, 0x38 );
PlayKey(player, chargeAnim, 2, 0x38);
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
PlaySoundThing(swingSoundDbl01, player, 1.0, -1, -1, 0x80);
SetFireWait(player, 2.0);
}
}
}
return;
# ........................................................................................
newplayer:
slash = 0;
nextAttack = 0;
slashAnimID=-1;
povSlashAnimID=-1;
// Disable autoblock
ClearActorFlags(player, 0x2000);
jkDisableSaber(player);
// Back to POV, since the saber should never get autoselected at start for a multiplayer game.
if ((jkGetSaberCam() == 1) && (GetCurrentCamera() == 1) && (GetPrimaryFocus(1) == player))
CycleCamera();
return;
# ........................................................................................
joined:
SetTimerEx(1.0, 10, 0, 0);
return;
# ........................................................................................
autoselect:
// Return the saber when out of everthing except the fists
// If the player has the weapon
if(GetInv(player, GetWeaponBin(11)) != 0.0)
{
ReturnEx(200.0);
}
else
{
ReturnEx(-1.0);
}
Return;
# ........................................................................................
killed:
if (GetLocalPlayerThing() == GetSenderRef())
{
if (GetCurWeapon(player) == 11)
{
PlaySoundThing(dismountSound, player, 1.0, -1, -1, 0x80);
SetCurWeapon( player, GetWeaponBin(1) );
}
nosaber = 1;
}
Return;
end